package com.qdlc.p2p.dal.mybatis.model.mapper;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.qdlc.p2p.dal.dto.UserRedEnvelope;
import com.qdlc.p2p.dal.model.UserRedEnvelopeModel;

public interface UserRedEnvelopeMapper {
	
	/**
	 * 查询红包
	 * @param model
	 * @return
	 */
	List<UserRedEnvelopeModel> list(UserRedEnvelopeModel model);
	
	List<UserRedEnvelopeModel> listByUserName(@Param("userName")String userName);
	
    /**
     * 根据Id查询
     * @param id
     * @return
     */
    UserRedEnvelope getUserRedEnvelopeById(long id);
    
    
    /**
     * 可使用红包列表
     * @param userId
     * @return
     */
    List<UserRedEnvelope> useableList(long userId);
    
    
    /**
     * 不可使用红包列表
     * @param userId
     * @return
     */
    List<UserRedEnvelope> notAvailableList(long userId);
    
    /**
     * 获取红包总金额
     * @param ids
     * @param userId
     * @return
     */
    Double getTotalAmountByIds(@Param("ids") long[] ids, @Param("userId") long userId);
    
    /**
     * 根据关联Id和使用类型获取红包总金额
     * @param keyId
     * @param useType
     * @return
     */
    Double getTotalAmountByKeyIdAndUseType(@Param("keyId") long keyId, @Param("useType") String useType);
    
    /**
     * 修改状态
     * @param keyId
     * @param useType
     */
    void updateStatusByKeyIdAndUseType(@Param("status")int status, @Param("keyId") long keyId, @Param("useType") String useType);
    
    /**
     * 统计指定年份的红包总金额
     * @param status
     * @param year
     * @return
     */
    Double[] statisticsMonthAmontByStatus(int status, String year);
    
    /**
     * 改变红包状态
     * @param id
     * @param status
     * @return
     */
    int changeStatusById(@Param("id") long id, @Param("status")int status);
    
    /**
     * 查询红包可用数量
     * @param ids
     * @param userId
     * @param type
     * @param expiredTime
     * @return
     */
    int checkCanUseRedEnvelope(@Param("ids")long[] ids, @Param("userId") long userId, @Param("type") int type);
    
    /**
     * 改变红包状态
     * @param ids
     * @param status
     * @param preStatus
     */
    int changeStatus(@Param("ids")long[] ids, @Param("status") int status, @Param("preStatus")int preStatus, @Param("expiredTime")Date expiredTime);
    
    /**
     * 将过期的红包设置成过期状态
     */
    void redEnvelopeExpireDispose();
    
    /**
     * 检测红包数是否都可以使用 
     * @param ids
     * @param userId
     * @return
     */
    int checkRedEnvelope(@Param("ids")long[] ids, @Param("userId")long userId);
    
    /**
     * 更新红包使用后的关联ID
     * @param ids
     * @param keyId
     * @param useType
     */
    int updateKeyId(@Param("ids")long[] ids, @Param("status")int status, @Param("keyId")long keyId, @Param("useType")String useType);
    
    
    
}